// import Vue from 'vue';
import post from '../apis/index';
/**
 * 判断目标是否为空对象
 * @param target 待判断目标
 * @returns {boolean} true：是；false：不是
 * @unit_test Object.spec.ts
 */
function isEmptyObject(target: Object) {
    return Object.keys(target).length === 0;
}
/**
 * 判断俩对象 是否相等
 * @propsCurr 当前object对象
 * @propsCompare 要比较的对象
 * @returns {boolean} true：是；false：不是
 * @unit_test Object.spec.ts
 */
function chargeObjectEqual(propsCurr: any, propsCompare: any) {
    const propsCurrVal = Object.getOwnPropertyNames(propsCurr);
    const propsCompareVal = Object.getOwnPropertyNames(propsCompare);
    if (propsCurrVal.length != propsCompareVal.length) {
        return false;
    }
    for (let index = 0, max = propsCurrVal.length; index < max; index++) {
        const element = propsCurrVal[index];
        if (propsCurr[element] !== propsCompare[element]) {
            return false;
        }
    }
    return true;
}

/**
 * 遍历对象的每一个属性，并允许传入一个回调函数来处理该属性
 * @param obj 待遍历对象
 * @param callback 仅支持一个参数，为当前遍历的对象的属性名
 */
function eachProp(obj: Object, callback: (propName: string) => void) {
    Object.keys(obj).forEach(callback);
}

function getCardList(that: any, cardList_3601: any, ids: any) {
    // console.log(that.cardList_3601)
    // 先复制一份
    const cardLists = JSON.parse(JSON.stringify(cardList_3601));
    const cardList: any[] = [];
    cardLists.forEach((item: any) => {
        cardList.push(item.ids);
    });
    return cardList;
}
/**
 * 解决翻页封装
 * @param that 传入this
 * @param keys 需要传入的参数，用数组方式传入
 * @param d 当前data保持table数据的名字 字符串
 * @param n 获取多少条数据确定是否翻页 默认10条
 *
 * 在data中 加入当前字段
 *  pagingDataList: [], // 翻页上送字段列表
 *  currentPageIndex: 0, // 当前页,
 *  nextButtonFlag: true, // 下翻页按钮 显示控制阀,
 *  APPREF: '',
 *
 * 接口请求头 appBody 中的RTNIND 翻页标志 判断
 * RTNIND:  this.pagingDataList.length === 0 ? '' : 1 , // 翻页标志 首次传空， 翻页传1
 *
 *
 * 例子 ： ChangePage(this,["APPREF"],"tableData")
 */

function ChangePage(that: any, keys: any, d: string, n: number = 10) {
    that.nextButtonFlag = that[d].length < n;
    // 将最后一条数据存入一个新的变量中
    const res1 = that[d];
    // console.log(res1,"res1")
    // let res1 = [5]
    let currentPagingData: any; let { } = {};
    // that.APPREF = "" // 分期付款申请编号 首次查询上送空；下翻页查询时上送最后一条记录中的分期付款申请编号；
    that.nextButtonFlag = res1.length < n;
    // if (res1.length > 9)
    currentPagingData = res1[res1.length - 1];
    // 判断当前数据是否小于10条 给按钮是否禁用状态
    // 申明两个变量
    let flag = false;
    let currentIndex = 0;
    that.pagingDataList.forEach((item: any, index: any) => { // 判断此次查询数据最后一条记翻页分期付款序号是否在已有列表中
        if (JSON.stringify(item) === JSON.stringify(currentPagingData)) {
            flag = true;
            currentIndex = index;
        }
    });
    if (flag) { // 存在
        that.currentPageIndex = currentIndex;
    } else {
        that.pagingDataList.push(currentPagingData);
        that.currentPageIndex = that.pagingDataList.length - 1;
        // console.log(that.pagingDataList,"that.pagingDataList",currentPagingData,that.currentPageIndex)
    }
    // console.log(currentIndex,"外面当前页",keys)
    // console.log(that.pagingDataList,"that.pagingDataList")
    if (that.pagingDataList.length) { // 判断翻页上传字段取值
        keys.forEach((x: any) => {
            // console.log(x,that.pagingDataList,that.currentPageIndex,"item")
            that[x] = that.pagingDataList[that.currentPageIndex][x];
            // console.log(that[x],"that[x]")
        });
        // that.APPREF = that.pagingDataList[that.currentPageIndex].APPREF
    }
    // that.RTNIND = that.pagingDataList.length === 0 ? '' : 1 // 翻页标志 首次传空， 翻页传1 // 首次查询上送空；翻页查询上送1；
}


/**
 * 解决传参需要数字补零的的问题 或其他需要补齐的问题
 * @param b 转换的数字  200.12
 * @param n 转换的长度  200.12
 */
function setNumber(b: any, n: number = 11, f: boolean = true, r: string = '0') {
    // console.log(b, 'b')

    if (b * 1 != parseFloat(b)) return b;

    if (n < (`${b}`).length) return b;
    const a = Array(n).fill(r, 0);
    b *= 1;
    // console.log(a, 'a')
    // if(f) b = b.toFixed(2).split('.').join('')
    if (f) b *= 100;
    b = (`${b}`).split('');
    // console.log(b, 'b')
    const s = a.length - b.length;
    const c = b.length;
    // console.log(s, c, 'cs')
    a.splice(s, c, ...b);
    // console.log(a.join(""))
    return a.join('');
}

/**
 * 解决对象 数组 字符串相等比较
 * @param a 需要比较的对象 数字 数组 字符串
 * @param b 需要比较的对象 数字 数组 字符串
 */
function isEqual(a: any, b: any) {
    if (a === b) return a !== 0 || 1 / a === 1 / b;
    if (a == null || b == null) return a === b;
    const CNA = toString.call(a); const CNB = toString.call(b);
    if (CNA !== CNB) return false;
    switch (CNA) {
        case '[object RegExp]':
        case '[object String]':
            return `${a}` === `${b}`;
        case '[object Number]':
            if (+a !== +a) return +b !== +b;
            return +a === 0 ? 1 / +a === 1 / b : +a === +b;
        case '[object Date]':
        case '[object Boolean]':
            return +a === +b;
    }
    if (CNA == '[object Object]') {
        const PA = Object.getOwnPropertyNames(a);
        const PB = Object.getOwnPropertyNames(b);
        if (PA.length != PB.length) {
            return false;
        }
        for (let i = 0; i < PA.length; i++) {
            const PN = PA[i];
            if (a[PN] !== b[PN]) {
                return false;
            }
        }
        return true;
    }
    if (CNA == '[object Array]') {
        if (a.toString() == b.toString()) {
            return true;
        }
        return false;
    }
}

/*
查询字典 方法
params： string
*/
export function getParamsURL(params: string): any {
    return new Promise((resolve, reject) => {
        post.Params.searchListByParam({ paramType: params }).then((res: any) => {
            if (res.data.success) {
                const arr = JSON.parse(JSON.stringify(res.data.content));
                arr.forEach((item: any) => {
                    if (item.paramCode === params) {
                        // this.paramsObj[item.paramCode] = item.paramValue;
                        console.log('输出对应的URL地址————————————', item.paramValue);
                        // context.commit('UPDATE_FLOWSERVER_RUL',item.paramValue)
                        resolve(item.paramValue)
                    }
                })
            }
        }).catch((error: any) => {
            reject(error)
        })
    })


    // return resData
}

const tbBudgetRequisi = {
    agentid: '', // '座席ID',                // 操作员号
    allcountfee: '', // 总手续费
    banknum: '', // 银行号
    budgettype: '', // 交易类型
    createTime: '', //
    createUser: '', //
    ctime: '', // 创建8  时间
    ctime1: '', //
    ctime2: '', // as
    custid: '', // 证件号
    custname: '', // 姓名
    custno: '', // 分期卡号
    // "id": 0,    // as
    instalamt: 0, // 分期金额
    installway: '', // '分期方式（客户主动申请[0]，客服主动营销[2]，客服主动外呼营销[1]）',
    isDeleted: '', // as
    isPage: '', // as
    jzrate: '', // 基准费率
    monthfee: '', // 月手续费
    monthnbr: 0, // 分期期数
    openamt: '', // 剩余可分期账单金额
    outohoneflag: '', // 呼入呼出标志 1-呼出，空-呼入，null-离线
    pageNum: 0, // as
    pageSize: 0, // as
    planno: '', // 计划编号
    retcode: '', // 交易返回码
    smppamt: '', // 参考申请金额
    updateTime: '', // as
    updateUser: '', // as
    zzrate: '', // 最终费率
};

export {
    isEmptyObject,
    eachProp,
    getCardList,
    setNumber,
    isEqual,
    ChangePage,
    chargeObjectEqual,
    tbBudgetRequisi,
};
